import {
  getAlbumList,
  getSongPlay
} from '../../utils/http'
const audio = getApp().audio
Page({
  pageNumber: 1, // 起始页
  prevSongIndex: -1, // 上一次播放的歌曲index
  nowSongIndex: -1, // 本次播放的歌曲index
  albumId: null, // 歌单id
  data: {
    playWay: false, // 播放方式。单曲:false , 全部:true
  },
  onLoad(e) {
    audio.playType = "albumSong"
    wx.setNavigationBarTitle({
      title: e.navtitle,
    })
    this.albumId = e.id
    this.getHotSong()
  },
  startOnPlay() {
    // 监听背景音频播放事件
    audio.onPlay(() => {
      console.log('hotSongList音频播放')
      if (audio.playType == "albumSong" && this.nowSongIndex !== -1) {
        this.setData({
          [`albumSongList[${this.nowSongIndex}].status`]: "playing",
          isPlaying: true,
          nowSongIndex: this.nowSongIndex
        })
      }
    })
    // 监听用户在系统音乐播放面板点击上一曲事件的监听函数
    audio.onPrev(() => {
      console.log('hotSongList用户点击了上一首')
      if (audio.playType == "albumSong" && this.nowSongIndex > 0) {
        this.playPrevAudio()
      }
    })
    // 监听用户在系统音乐播放面板点击下一曲事件
    audio.onNext(() => {
      console.log('hotSongList用户点击了下一首')
      if (audio.playType == "albumSong") {
        this.playNextAudio()
      }
    })
    // 监听背景音频自然播放结束事件
    audio.onEnded(() => {
      console.log('hotSongList音频自然播放结束')
      if (audio.playType == "albumSong" && this.nowSongIndex !== -1) {
        this.setData({
          [`albumSongList[${this.nowSongIndex}].status`]: "stop",
          isPlaying: false,
          nowSongIndex: this.nowSongIndex
        })
        if (this.data.playWay) {
          this.playNextAudio()
        } else(
          this.startPlayAudio()
        )
      }
    })
    // 监听背景音频暂停事件
    audio.onPause(() => {
      console.log('hotSongList音频暂停')
      if (audio.playType == "albumSong" && this.nowSongIndex !== -1) {
        this.setData({
          [`albumSongList[${this.nowSongIndex}].status`]: "pauseing",
          isPlaying: false,
          nowSongIndex: this.nowSongIndex
        })
      }
    })
    // 监听背景音频停止事件
    audio.onStop(() => {
      console.log('hotSongList背景音频停止')
      if (audio.playType == "albumSong" && this.prevSongIndex !== -1) {
        this.setData({
          [`albumSongList[${this.prevSongIndex}].status`]: "stop",
          isPlaying: false,
          nowSongIndex: this.nowSongIndex
        })
      }
    })
  },
  // 加载Song列表
  async getHotSong() {
    let albumSongList = this.data.albumSongList || []
    wx.showLoading({
      title: '',
      mask: true
    })
    let res = await getAlbumList({
      albumId: this.albumId,
      pageNumber: this.pageNumber
    })
    wx.hideLoading()
    if (res.code !== 200) {
      return wx.showToast({
        title: res.msg,
        icon: "none"
      })
    }
    albumSongList.push(...res.albumList)
    this.setData({
      albumSongList,
      hasMore: res.totalPage > res.nowPageNumber,
    })
  },
  // 加载歌曲数据并播放
  async getHotSongListData(songId) {
    wx.showLoading({
      title: '',
      mask: true
    })
    let res = await getSongPlay({
      songId
    })
    wx.hideLoading()
    if (res.code !== 200) {
      setTimeout(() => {
        this.playNextAudio()
      }, 2000)
      return wx.showToast({
        title: res.msg + "。即将尝试播放下一曲",
        icon: 'none',
        duration: 2000
      })
    }
    let item = this.data.albumSongList[this.nowSongIndex]
    audio.stop()
    audio.src = res.data.url
    audio.title = item.title
    audio.singer = item.singer
    audio.coverImgUrl = res.data.pic
    audio.play()
    this.setData({
      [`albumSongList[${this.nowSongIndex}].songData`]: res.data
    })
  },
  // 加载更多
  loadMore() {
    if (this.data.hasMore) {
      this.pageNumber += 1
      this.getHotSong()
    }
  },
  // 暂停
  pauseAudio(e) {
    audio.pause()
  },
  // 点击播放按钮
  playAudio(e) {
    if (this.nowSongIndex === -1) {
      this.startOnPlay()
    }
    this.nowSongIndex = e.currentTarget.dataset.index
    this.startPlayAudio()
  },
  // 点击控件播放按钮
  playAudioFromControl() {
    if (audio.src) {
      audio.play()
    }
  },
  // 点击控件暂停按钮
  pauseAudioFromControl() {
    audio.pause()
  },
  // 上一首
  playPrevAudio() {
    if (this.nowSongIndex <= 0) {
      // return wx.showToast({
      //   title: '已经是第一首歌啦~',
      //   icon: "none"
      // })
      this.nowSongIndex = this.data.hotSongList.length - 1 // 直接回到最后
    } else {
      this.nowSongIndex -= 1
    }
    this.startPlayAudio()
  },
  // 下一首
  playNextAudio() {
    if (this.nowSongIndex === this.data.hotSongList.length - 1) {
      // return wx.showToast({
      //   title: '已经是最后一首歌啦~',
      //   icon: "none"
      // })
      this.nowSongIndex = 0 // 直接从头开始播放
    }else{
      this.nowSongIndex += 1
    }
    this.startPlayAudio()
  },
  // 切换播放方式
  changePlayWay() {
    this.setData({
      playWay: !this.data.playWay
    })
  },
  // 播放指定歌曲
  async startPlayAudio() {
    let item = this.data.albumSongList[this.nowSongIndex]
    let {
      songId,
    } = item
    // 1、判断上一次点击的歌曲与本次点击是否相同。
    // 相同：继续播放/开始播放/重新播放
    // 不同：结束上次的播放状态，并设置新的播放记录
    if (this.prevSongIndex === this.nowSongIndex) {
      if (item.status) { // 播放过会有记录
        switch (item.status) {
          case "stop": // 状态已停止，重新播放
            if (item.songData) {
              audio.src = item.songData.url
              audio.title = item.title
              audio.singer = item.singer
              audio.coverImgUrl = item.songData.pic
              audio.play()
            } else { // 歌曲信息意外丢失，重载
              await this.getHotSongListData(songId)
            }
            break;
          case "pauseing": // 暂停中，继续播放
            audio.play()
            break;
          default:
            break;
        }
      } else {
        // 未播放过，需要获取歌曲信息，开始播放
        await this.getHotSongListData(songId)
      }
    } else {
      // 不是第一次播放歌曲，判断新歌曲是否有歌曲信息
      if (this.prevSongIndex !== -1) {
        if (item.songData) {
          audio.stop()
          audio.src = item.songData.url
          audio.title = item.title
          audio.singer = item.singer
          audio.coverImgUrl = item.songData.pic
          audio.play()
        } else { // 歌曲信息意外丢失，重载
          await this.getHotSongListData(songId)
        }
      } else { // 第一次播放，要加载歌曲信息，并播放
        await this.getHotSongListData(songId)
      }
    }
    // 重置上次播放index为本次的，之所以用定时，是因为音频组件在监听，它会慢一点
    setTimeout(() => {
      this.prevSongIndex = this.nowSongIndex
    }, 100)
  },
})